﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using MGI.AccesoDatos;
using ComunesMGI.DataTypes;
using System.ServiceModel;
using ComunesMGI.Constantes;

namespace MGI.Logica
{
    /// <summary>
    /// manejador de usuarios
    /// </summary>
    class MgrUsuarios
    {

        #region Singleton
        /// <summary>
        /// implementación de singleton para el manejador de usuarios
        /// </summary>
        static private MgrUsuarios _instance;

        /// <summary>
        /// implementación de singleton para el manejador de usuarios
        /// retorna una instancia del manejador
        /// </summary>
        /// <returns>MgrUsuarios</returns>
        static public MgrUsuarios GetInstance()
        {
            if (_instance == null)
            {
                _instance = new MgrUsuarios();
            }
            return _instance;
        }

        #endregion



        public List<DataUsuario> GetUsuarios()
        {
            AccesoDatosFactory accesoDatos = AccesoDatosFactory.GetInstance();
            IDatosUsuarios datosUsuarios = accesoDatos.GetIDatosUsuarios();
            return datosUsuarios.GetUsuarios();
        }

        public bool EnviarMailAsignarTarea(string mail, DataTareaConCampos dataTarea)
        {
            String subjet = "Se le ha asignado la tarea " + dataTarea.IdTarea;
            String body = "Se le ha asignado la tarea " + dataTarea.IdTarea;
            foreach (DataCampo campo in dataTarea.Campos)
            {
                body = body + "\r\n" + campo.Titulo + ": " + campo.Valor + "\r\n";
            }
                          
            MGIMail.SendMail(mail, subjet, body);
            return true;
        }


        public void EnviarMailEliminarTarea(DataEliminarTarea tarea, DataSistema sistema)
        {
            String subjet = "Se ha eliminado la tarea " + tarea.IdTarea;
            String body = "Se ha eliminado la tarea " + tarea.IdTarea +
                          "\r\nTítulo: " + tarea.Titulo +
                          "\r\nDescripción: " + tarea.Descripcion +
                          "\r\nSistema: " + sistema.Nombre +
                          "\r\nSitio: " + sistema.Sitio;
            MGIMail.SendMail(tarea.MailResponsable, subjet, body);
        }

        public void EnviarMailModificarTarea(DataEliminarTarea tarea, DataSistema sistema)
        {
            String subjet = "Se ha modificado la tarea " + tarea.IdTarea;
            String body = "Se ha modificado la tarea " + tarea.IdTarea +
                          "\r\nTítulo: " + tarea.Titulo +
                          "\r\nDescripción: " + tarea.Descripcion +
                          "\r\nSistema: " + sistema.Nombre +
                          "\r\nSitio: " + sistema.Sitio;
            MGIMail.SendMail(tarea.MailResponsable, subjet, body);
        }


        public void AddUsuario(DataUsuario usuario)
        {
            AccesoDatosFactory accesoDatos = AccesoDatosFactory.GetInstance();
            IDatosUsuarios datosUsuarios = accesoDatos.GetIDatosUsuarios();
            datosUsuarios.AddUsuario(usuario);
        }

        public void ModificarUsuario(DataUsuario usuario)
        {
            AccesoDatosFactory accesoDatos = AccesoDatosFactory.GetInstance();
            IDatosUsuarios datosUsuarios = accesoDatos.GetIDatosUsuarios();

            //Si la fecha de sincronizacion es vacia no se modifica la fecha en la base de datos
            if (usuario.FechaSincronizacion.Equals(ConstantesMGI.FechaVacia))
            {
                DataUsuario dataUsaurio = datosUsuarios.GetUsuario(usuario.Codigo);
                usuario.FechaSincronizacion = dataUsaurio.FechaSincronizacion;
            }

            datosUsuarios.ModificarUsuario(usuario);
        }

        public void BajaUsuario(int usrCod)
        {
            AccesoDatosFactory accesoDatos = AccesoDatosFactory.GetInstance();
            IDatosUsuarios datosUsuarios = accesoDatos.GetIDatosUsuarios();
            datosUsuarios.BajaUsuario(usrCod);
        }



        public DataUsuario GetUsuario(string nomUsuario)
        {
           AccesoDatosFactory accesoDatos = AccesoDatosFactory.GetInstance();
            IDatosUsuarios datosUsuarios = accesoDatos.GetIDatosUsuarios();
            return datosUsuarios.GetUsuario( nomUsuario);
        }
    }
}
